library(readr)
library(ggplot2)
library(mosaic)
library(dplyr)
library(mosaicCore)
library(RColorBrewer)
HateCrimes <- read_csv("NYPD_Hate_Crimes.csv")

What Assaults are most common among each Bias/Borough Group?

Bias

bias <- as.vector(HateCrimes$`Bias Motive Description`) 

bias <- as.matrix(table(bias))
bias
                                  [,1]
60 YRS AND OLDER                     1
ANTI-ARAB                            7
ANTI-ASIAN                         178
ANTI-BLACK                         114
ANTI-BUDDHIST                        2
ANTI-CATHOLIC                       24
ANTI-FEMALE                         14
ANTI-FEMALE HOMOSEXUAL (LESBIAN)    15
ANTI-GENDER NON-CONFORMING           6
ANTI-HINDU                           2
ANTI-HISPANIC                       19
ANTI-JEHOVAHS WITNESS                1
ANTI-JEWISH                        592
ANTI-LGBT (MIXED GROUP)             11
ANTI-MALE HOMOSEXUAL (GAY)         158
ANTI-MULTI-RACIAL GROUPS             3
ANTI-MUSLIM                         31
ANTI-OTHER ETHNICITY                22
ANTI-OTHER RELIGION                  2
ANTI-PHYSICAL DISABILITY             1
ANTI-RELIGIOUS PRACTICE GENERALLY    2
ANTI-TRANSGENDER                    35
ANTI-WHITE                          56
mypalette<-brewer.pal(7,"BuGn") 

barchart(bias, main = "Bar Chart of Bias" , col = mypalette)

sixtyyrs <- HateCrimes %>% filter(`Bias Motive Description` == "60 YRS AND OLDER")
anti_arab <- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-ARAB")
anti_asain <- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-ASIAN")
anti_black <- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-BLACK")
anti_buddhist <- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-BUDDHIST")
anti_catholic <- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-CATHOLIC")
anti_female <- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-FEMALE")
anti_lesbian <- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-FEMALE HOMOSEXUAL (LESBIAN)")
anti_gendernonconforming <- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-GENDER NON-CONFORMING")
anti_hindu <- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-HINDU")
anti_hispanic <- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-HISPANIC")
anti_jehovas<- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-JEHOVAHS WITNESS")
anti_jewish <- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-JEWISH")
anti_lgbt <- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-LGBT (MIXED GROUP)")
anti_gay <- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-MALE HOMOSEXUAL (GAY)")
anti_multiracial <- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-MULTI-RACIAL GROUPS")
anti_muslim <- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-MUSLIM")
anti_otherethnicity <- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-OTHER ETHNICITY")
anti_otherreligion <- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-OTHER RELIGION")
anti_physicaldis <- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-PHYSICAL DISABILITY")
anti_religion <- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-RELIGIOUS PRACTICE GENERALLY")
anti_trans <- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-TRANSGENDER")
anti_white <- HateCrimes %>% filter(`Bias Motive Description` == "ANTI-WHITE")

60 Yrs

assaults_60yrs <- as.vector(sixtyyrs$`Offense Description`) 

assaults_60yrs <- as.matrix(table(assaults_60yrs))
assaults_60yrs
              [,1]
GRAND LARCENY    1

Anti-Arab

assaults_anti_arab <- as.vector(anti_arab$`Offense Description`) 

assaults_anti_arab <- as.matrix(table(assaults_anti_arab))
assaults_anti_arab
                               [,1]
ASSAULT 3 & RELATED OFFENSES      1
CRIMINAL MISCHIEF & RELATED OF    4
MISCELLANEOUS PENAL LAW           1
OFF. AGNST PUB ORD SENSBLTY &     1
barchart(assaults_anti_arab, main = "Bar Chart of Assaults with Anti-Arab Bias" , col = mypalette)

Anti-Asain

assaults_anti_asain <- as.vector(anti_asain$`Offense Description`) 

assaults_anti_asain<- as.matrix(table(assaults_anti_asain))
assaults_anti_asain
                               [,1]
ASSAULT 3 & RELATED OFFENSES     60
CRIMINAL MISCHIEF & RELATED OF   16
FELONY ASSAULT                   36
GRAND LARCENY                     2
HARRASSMENT 2                     2
MISCELLANEOUS PENAL LAW          13
MURDER & NON-NEGL. MANSLAUGHTE    3
OFF. AGNST PUB ORD SENSBLTY &    37
ROBBERY                           8
SEX CRIMES                        1
barchart(assaults_anti_asain, main = "Bar Chart of Assaults with Anti-Asain Bias" , col = mypalette)

Anti-Black

assaults_anti_black <- as.vector(anti_black$`Offense Description`) 

assaults_anti_black<- as.matrix(table(assaults_anti_black))
assaults_anti_black
                               [,1]
ASSAULT 3 & RELATED OFFENSES      9
CRIMINAL MISCHIEF & RELATED OF   60
CRIMINAL TRESPASS                 1
FELONY ASSAULT                   10
HARRASSMENT 2                     1
MISCELLANEOUS PENAL LAW          15
OFF. AGNST PUB ORD SENSBLTY &    18
barchart(assaults_anti_black, main = "Bar Chart of Assaults with Anti-Black Bias" , col = mypalette)

Anti-Buddhist

assaults_anti_buddhist <- as.vector(anti_buddhist$`Offense Description`) 

assaults_anti_buddhist<- as.matrix(table(assaults_anti_buddhist))
assaults_anti_buddhist
                               [,1]
CRIMINAL MISCHIEF & RELATED OF    2
barchart(assaults_anti_buddhist, main = "Bar Chart of Assaults with Anti_Buddhist Bias" , col = mypalette)

Anti-Catholic

assaults_anti_catholic <- as.vector(anti_catholic$`Offense Description`) 

assaults_anti_catholic<- as.matrix(table(assaults_anti_catholic))
assaults_anti_catholic
                               [,1]
BURGLARY                          1
CRIMINAL MISCHIEF & RELATED OF   19
MISCELLANEOUS PENAL LAW           2
OFF. AGNST PUB ORD SENSBLTY &     1
PETIT LARCENY                     1
barchart(assaults_anti_catholic, main = "Bar Chart of Assaults with Anti-Catholic Bias" , col = mypalette)

Anti-Female

assaults_anti_female <- as.vector(anti_female$`Offense Description`) 

assaults_anti_female<- as.matrix(table(assaults_anti_female))
assaults_anti_female
                             [,1]
ASSAULT 3 & RELATED OFFENSES   13
ROBBERY                         1
barchart(assaults_anti_female, main = "Bar Chart of Assaults with Anti-Female Bias" , col = mypalette)

Anti-Lesbian

assaults_anti_lesbian <- as.vector(anti_lesbian$`Offense Description`) 

assaults_anti_lesbian<- as.matrix(table(assaults_anti_lesbian))
assaults_anti_lesbian
                              [,1]
ASSAULT 3 & RELATED OFFENSES     3
FELONY ASSAULT                   7
MISCELLANEOUS PENAL LAW          2
OFF. AGNST PUB ORD SENSBLTY &    2
SEX CRIMES                       1
barchart(assaults_anti_lesbian, main = "Bar Chart of Assaults with Anti-Lesbian Bias" , col = mypalette)

Anti-Gender Non-Conforming

assaults_anti_gendernonconforming <- as.vector(anti_gendernonconforming$`Offense Description`) 

assaults_anti_gendernonconforming<- as.matrix(table(assaults_anti_gendernonconforming))
assaults_anti_gendernonconforming
                             [,1]
ASSAULT 3 & RELATED OFFENSES    2
FELONY ASSAULT                  3
ROBBERY                         1
barchart(assaults_anti_gendernonconforming, main = "Bar Chart of Assaults with Anti-Gender Non-Conforming Bias" , col = mypalette)

Anti-Hindu

assaults_anti_hindu <- as.vector(anti_hindu$`Offense Description`) 

assaults_anti_hindu<- as.matrix(table(assaults_anti_hindu))
assaults_anti_hindu
                               [,1]
ASSAULT 3 & RELATED OFFENSES      1
CRIMINAL MISCHIEF & RELATED OF    1
barchart(assaults_anti_hindu, main = "Bar Chart of Assaults with Anti-Hindu Bias" , col = mypalette)

Anti-Hispanic

assaults_anti_hispanic <- as.vector(anti_hispanic$`Offense Description`) 

assaults_anti_hispanic<- as.matrix(table(assaults_anti_hispanic))
assaults_anti_hispanic
                               [,1]
ASSAULT 3 & RELATED OFFENSES      4
CRIMINAL MISCHIEF & RELATED OF    5
FELONY ASSAULT                    7
MISCELLANEOUS PENAL LAW           1
OFF. AGNST PUB ORD SENSBLTY &     1
ROBBERY                           1
barchart(assaults_anti_hispanic, main = "Bar Chart of Assaults with Anti-Hispanic Bias" , col = mypalette)

Anti-Jehovas Witnesses

assaults_anti_jehovas <- as.vector(anti_jehovas$`Offense Description`) 

assaults_anti_jehovas<- as.matrix(table(assaults_anti_jehovas))
assaults_anti_jehovas
                              [,1]
OFF. AGNST PUB ORD SENSBLTY &    1
barchart(assaults_anti_jehovas, main = "Bar Chart of Assaults with Anti-Jehovas Witnesses Bias" , col = mypalette)

Anti-Jewish

assaults_anti_jewish <- as.vector(anti_jewish$`Offense Description`) 

assaults_anti_jewish<- as.matrix(table(assaults_anti_jewish))
assaults_anti_jewish
                               [,1]
ASSAULT 3 & RELATED OFFENSES     35
BURGLARY                          5
CRIMINAL MISCHIEF & RELATED OF  166
CRIMINAL TRESPASS                 1
FELONY ASSAULT                   22
FRAUDS                            1
GRAND LARCENY                    15
HARRASSMENT 2                     6
INVESTIGATIONS/COMPLAINTS ONLY    1
MISCELLANEOUS PENAL LAW         274
OFF. AGNST PUB ORD SENSBLTY &    60
PETIT LARCENY                     1
ROBBERY                           5
barchart(assaults_anti_jewish, main = "Bar Chart of Assaults with Anti-Jewish Bias" , col = mypalette)

Anti-LGBT

assaults_anti_lgbt <- as.vector(anti_lgbt$`Offense Description`) 

assaults_anti_lgbt<- as.matrix(table(assaults_anti_lgbt))
assaults_anti_lgbt
                               [,1]
ASSAULT 3 & RELATED OFFENSES      2
CRIMINAL MISCHIEF & RELATED OF    5
MISCELLANEOUS PENAL LAW           2
OFF. AGNST PUB ORD SENSBLTY &     2
barchart(assaults_anti_lgbt, main = "Bar Chart of Assaults with Anti-LGBT Bias" , col = mypalette)

Anti-Gay

assaults_anti_gay <- as.vector(anti_gay$`Offense Description`) 

assaults_anti_gay<- as.matrix(table(assaults_anti_gay))
assaults_anti_gay
                               [,1]
ASSAULT 3 & RELATED OFFENSES     51
CRIMINAL MISCHIEF & RELATED OF   26
FELONY ASSAULT                   32
HARRASSMENT 2                     3
MISCELLANEOUS PENAL LAW           8
MURDER & NON-NEGL. MANSLAUGHTE    1
OFF. AGNST PUB ORD SENSBLTY &    20
ROBBERY                          16
SEX CRIMES                        1
barchart(assaults_anti_gay, main = "Bar Chart of Assaults with Anti-Gay Bias" , col = mypalette)

Anti-Multiracial Groups

assaults_anti_multiracial <- as.vector(anti_multiracial$`Offense Description`) 

assaults_anti_multiracial<- as.matrix(table(assaults_anti_multiracial))
assaults_anti_multiracial
                               [,1]
ASSAULT 3 & RELATED OFFENSES      1
CRIMINAL MISCHIEF & RELATED OF    1
MISCELLANEOUS PENAL LAW           1
barchart(assaults_anti_multiracial, main = "Bar Chart of Assaults with Anti-Multiracial Groups Bias" , col = mypalette)

Anti-Muslim

assaults_anti_muslim <- as.vector(anti_muslim$`Offense Description`) 

assaults_anti_muslim<- as.matrix(table(assaults_anti_muslim))
assaults_anti_muslim
                               [,1]
ASSAULT 3 & RELATED OFFENSES      6
CRIMINAL MISCHIEF & RELATED OF    5
FELONY ASSAULT                    6
GRAND LARCENY                     1
HARRASSMENT 2                     1
OFF. AGNST PUB ORD SENSBLTY &     8
ROBBERY                           4
barchart(assaults_anti_muslim, main = "Bar Chart of Assaults with Anti-Muslim Bias" , col = mypalette)

Anti-Other Ethnicity

assaults_anti_otherethnicity <- as.vector(anti_otherethnicity$`Offense Description`) 

assaults_anti_otherethnicity<- as.matrix(table(assaults_anti_otherethnicity))
assaults_anti_otherethnicity
                               [,1]
ASSAULT 3 & RELATED OFFENSES      5
CRIMINAL MISCHIEF & RELATED OF    8
FELONY ASSAULT                    1
MISCELLANEOUS PENAL LAW           4
OFF. AGNST PUB ORD SENSBLTY &     4
barchart(assaults_anti_otherethnicity, main = "Bar Chart of Assaults with Anti-Other Ethnicity Bias" , col = mypalette)

Anti-Other Religion

assaults_anti_otherreligion <- as.vector(anti_otherreligion$`Offense Description`) 

assaults_anti_otherreligion<- as.matrix(table(assaults_anti_otherreligion))
assaults_anti_otherreligion
                               [,1]
CRIMINAL MISCHIEF & RELATED OF    1
MISCELLANEOUS PENAL LAW           1
barchart(assaults_anti_otherreligion, main = "Bar Chart of Assaults with Anti-Other Religion Bias" , col = mypalette)

Anti-Physical Disability

assaults_anti_physicaldis <- as.vector(anti_physicaldis$`Offense Description`) 

assaults_anti_physicaldis<- as.matrix(table(assaults_anti_physicaldis))
assaults_anti_physicaldis
                        [,1]
MISCELLANEOUS PENAL LAW    1
barchart(assaults_anti_physicaldis, main = "Bar Chart of Assaults with Anti-Physical Disability Bias" , col = mypalette)

Anti-Religion Practices Generally

assaults_anti_religion <- as.vector(anti_religion$`Offense Description`) 

assaults_anti_religion<- as.matrix(table(assaults_anti_religion))
assaults_anti_religion
                               [,1]
CRIMINAL MISCHIEF & RELATED OF    1
MISCELLANEOUS PENAL LAW           1
barchart(assaults_anti_religion, main = "Bar Chart of Assaults with Anti-Religion Practices Generally Bias" , col = mypalette)

Anti-Transgender

assaults_anti_trans <- as.vector(anti_trans$`Offense Description`) 

assaults_anti_trans<- as.matrix(table(assaults_anti_trans))
assaults_anti_trans
                               [,1]
ASSAULT 3 & RELATED OFFENSES     17
CRIMINAL MISCHIEF & RELATED OF    2
DANGEROUS WEAPONS                 2
FELONY ASSAULT                    9
MISCELLANEOUS PENAL LAW           1
OFF. AGNST PUB ORD SENSBLTY &     3
ROBBERY                           1
barchart(assaults_anti_trans, main = "Bar Chart of Assaults with Anti-Transgender Bias" , col = mypalette)

Anti-White

assaults_anti_white <- as.vector(anti_white$`Offense Description`) 

assaults_anti_white<- as.matrix(table(assaults_anti_white))
assaults_anti_white
                               [,1]
ASSAULT 3 & RELATED OFFENSES     22
CRIMINAL MISCHIEF & RELATED OF    9
FELONY ASSAULT                   15
GRAND LARCENY                     1
HARRASSMENT 2                     1
OFF. AGNST PUB ORD SENSBLTY &     6
RAPE                              1
ROBBERY                           1
barchart(assaults_anti_white, main = "Bar Chart of Assaults with Anti-White Bias" , col = mypalette)

Borough

borough <- as.vector(HateCrimes$`Patrol Borough Name`) 

borough <- as.matrix(table(borough))
borough
                          [,1]
PATROL BORO BKLYN NORTH    198
PATROL BORO BKLYN SOUTH    243
PATROL BORO BRONX          110
PATROL BORO MAN NORTH      167
PATROL BORO MAN SOUTH      295
PATROL BORO QUEENS NORTH   152
PATROL BORO QUEENS SOUTH    83
PATROL BORO STATEN ISLAND   48
mypalette<-brewer.pal(7,"BuGn") 

barchart(borough, main = "Bar Chart of Borough" , col = mypalette)

bklyn_north <- HateCrimes %>% filter(`Patrol Borough Name` == "PATROL BORO BKLYN NORTH")
bklyn_south <- HateCrimes %>% filter(`Patrol Borough Name` == "PATROL BORO BKLYN SOUTH")
bronx <- HateCrimes %>% filter(`Patrol Borough Name` == "PATROL BORO BRONX")
man_north <- HateCrimes %>% filter(`Patrol Borough Name` == "PATROL BORO MAN NORTH")
man_south <- HateCrimes %>% filter(`Patrol Borough Name` == "PATROL BORO MAN SOUTH")
queens_north <- HateCrimes %>% filter(`Patrol Borough Name` == "PATROL BORO QUEENS NORTH")
queens_south <- HateCrimes %>% filter(`Patrol Borough Name` == "PATROL BORO QUEENS SOUTH")
staten_island <- HateCrimes %>% filter(`Patrol Borough Name` == "PATROL BORO STATEN ISLAND")

Brooklyn North

assaults_bklyn_north <- as.vector(bklyn_north$`Offense Description`) 

assaults_bklyn_north<- as.matrix(table(assaults_bklyn_north))
assaults_bklyn_north
                               [,1]
ASSAULT 3 & RELATED OFFENSES     39
CRIMINAL MISCHIEF & RELATED OF   41
FELONY ASSAULT                   28
GRAND LARCENY                     8
HARRASSMENT 2                     4
MISCELLANEOUS PENAL LAW          45
OFF. AGNST PUB ORD SENSBLTY &    25
ROBBERY                           8
barchart(assaults_bklyn_north, main = "Bar Chart of Assaults in Brooklyn North" , col = mypalette)

Brooklyn South

assaults_bklyn_south <- as.vector(bklyn_south$`Offense Description`) 

assaults_bklyn_south<- as.matrix(table(assaults_bklyn_south))
assaults_bklyn_south
                               [,1]
ASSAULT 3 & RELATED OFFENSES     40
BURGLARY                          5
CRIMINAL MISCHIEF & RELATED OF   60
CRIMINAL TRESPASS                 1
DANGEROUS WEAPONS                 1
FELONY ASSAULT                   13
GRAND LARCENY                     6
HARRASSMENT 2                     3
MISCELLANEOUS PENAL LAW          78
MURDER & NON-NEGL. MANSLAUGHTE    1
OFF. AGNST PUB ORD SENSBLTY &    27
ROBBERY                           8
barchart(assaults_bklyn_south, main = "Bar Chart of Assaults in Brooklyn South" , col = mypalette)

Bronx

assaults_bronx <- as.vector(bronx$`Offense Description`) 

assaults_bronx<- as.matrix(table(assaults_bronx))
assaults_bronx
                               [,1]
ASSAULT 3 & RELATED OFFENSES     16
BURGLARY                          1
CRIMINAL MISCHIEF & RELATED OF   39
CRIMINAL TRESPASS                 1
FELONY ASSAULT                   16
HARRASSMENT 2                     1
INVESTIGATIONS/COMPLAINTS ONLY    1
MISCELLANEOUS PENAL LAW          24
OFF. AGNST PUB ORD SENSBLTY &     4
RAPE                              1
ROBBERY                           6
barchart(assaults_bronx, main = "Bar Chart of Assaults in Bronx" , col = mypalette)

Manhattan North

assaults_man_north <- as.vector(man_north$`Offense Description`) 

assaults_man_north<- as.matrix(table(assaults_man_north))
assaults_man_north
                               [,1]
ASSAULT 3 & RELATED OFFENSES     23
CRIMINAL MISCHIEF & RELATED OF   38
FELONY ASSAULT                   17
GRAND LARCENY                     2
HARRASSMENT 2                     1
MISCELLANEOUS PENAL LAW          55
MURDER & NON-NEGL. MANSLAUGHTE    2
OFF. AGNST PUB ORD SENSBLTY &    26
PETIT LARCENY                     1
ROBBERY                           2
barchart(assaults_man_north, main = "Bar Chart of Assaults in Manhattan North" , col = mypalette)

Manhattan South

assaults_man_south <- as.vector(man_south$`Offense Description`) 

assaults_man_south<- as.matrix(table(assaults_man_south))
assaults_man_south
                               [,1]
ASSAULT 3 & RELATED OFFENSES     63
CRIMINAL MISCHIEF & RELATED OF   56
FELONY ASSAULT                   49
GRAND LARCENY                     3
HARRASSMENT 2                     1
MISCELLANEOUS PENAL LAW          57
OFF. AGNST PUB ORD SENSBLTY &    53
PETIT LARCENY                     1
ROBBERY                           9
SEX CRIMES                        3
barchart(assaults_man_south, main = "Bar Chart of Assaults in Manhattan South" , col = mypalette)

Queens North

assaults_queens_north <- as.vector(queens_north$`Offense Description`) 

assaults_queens_north<- as.matrix(table(assaults_queens_north))
assaults_queens_north
                               [,1]
ASSAULT 3 & RELATED OFFENSES     32
CRIMINAL MISCHIEF & RELATED OF   54
FELONY ASSAULT                   12
FRAUDS                            1
GRAND LARCENY                     1
HARRASSMENT 2                     2
MISCELLANEOUS PENAL LAW          39
OFF. AGNST PUB ORD SENSBLTY &     9
ROBBERY                           2
barchart(assaults_queens_north, main = "Bar Chart of Assaults in Queens North" , col = mypalette)

Queens South

assaults_queens_south <- as.vector(queens_south$`Offense Description`) 

assaults_queens_south<- as.matrix(table(assaults_queens_south))
assaults_queens_south
                               [,1]
ASSAULT 3 & RELATED OFFENSES     12
CRIMINAL MISCHIEF & RELATED OF   19
DANGEROUS WEAPONS                 1
FELONY ASSAULT                   10
HARRASSMENT 2                     2
MISCELLANEOUS PENAL LAW          19
MURDER & NON-NEGL. MANSLAUGHTE    1
OFF. AGNST PUB ORD SENSBLTY &    17
ROBBERY                           2
barchart(assaults_queens_south, main = "Bar Chart of Assaults in Queens South" , col = mypalette)

Staten Island

assaults_staten_island <- as.vector(staten_island$`Offense Description`) 

assaults_staten_island<- as.matrix(table(assaults_staten_island))
assaults_staten_island
                               [,1]
ASSAULT 3 & RELATED OFFENSES      7
CRIMINAL MISCHIEF & RELATED OF   24
FELONY ASSAULT                    3
MISCELLANEOUS PENAL LAW          10
OFF. AGNST PUB ORD SENSBLTY &     3
ROBBERY                           1
barchart(assaults_staten_island, main = "Bar Chart of Assaults in Staten Island" , col = mypalette)

Bias group assaulted the most in each borough

Brooklyn North

bias_bklyn_north <- as.vector(bklyn_north$`Bias Motive Description`) 

bias_bklyn_north<- as.matrix(table(bias_bklyn_north))
bias_bklyn_north
                                 [,1]
ANTI-ARAB                           1
ANTI-ASIAN                         15
ANTI-BLACK                         17
ANTI-CATHOLIC                       1
ANTI-FEMALE                        14
ANTI-FEMALE HOMOSEXUAL (LESBIAN)    2
ANTI-HISPANIC                       3
ANTI-JEWISH                       100
ANTI-LGBT (MIXED GROUP)             1
ANTI-MALE HOMOSEXUAL (GAY)         24
ANTI-MUSLIM                         3
ANTI-OTHER ETHNICITY                3
ANTI-TRANSGENDER                    7
ANTI-WHITE                          7
barchart(bias_bklyn_north, main = "Bar Chart of Bias in Brooklyn North" , col = mypalette)

Brooklyn South

bias_bklyn_south <- as.vector(bklyn_south$`Bias Motive Description`) 

bias_bklyn_south<- as.matrix(table(bias_bklyn_south))
bias_bklyn_south
                                  [,1]
ANTI-ARAB                            3
ANTI-ASIAN                          21
ANTI-BLACK                          16
ANTI-CATHOLIC                        7
ANTI-GENDER NON-CONFORMING           1
ANTI-HISPANIC                        2
ANTI-JEWISH                        158
ANTI-LGBT (MIXED GROUP)              1
ANTI-MALE HOMOSEXUAL (GAY)          20
ANTI-MUSLIM                          6
ANTI-OTHER RELIGION                  1
ANTI-RELIGIOUS PRACTICE GENERALLY    1
ANTI-TRANSGENDER                     2
ANTI-WHITE                           4
barchart(bias_bklyn_south, main = "Bar Chart of Bias in Brooklyn South" , col = mypalette)

Bronx

bias_bronx <- as.vector(bronx$`Bias Motive Description`) 

bias_bronx<- as.matrix(table(bias_bronx))
bias_bronx
                                 [,1]
ANTI-ASIAN                          8
ANTI-BLACK                          9
ANTI-CATHOLIC                       2
ANTI-FEMALE HOMOSEXUAL (LESBIAN)    3
ANTI-HISPANIC                       4
ANTI-JEWISH                        51
ANTI-LGBT (MIXED GROUP)             1
ANTI-MALE HOMOSEXUAL (GAY)         13
ANTI-MUSLIM                         6
ANTI-TRANSGENDER                    5
ANTI-WHITE                          8
barchart(bias_bronx, main = "Bar Chart of Bias in Bronx" , col = mypalette)

Manhattan North

bias_man_north <- as.vector(man_north$`Bias Motive Description`) 

bias_man_north<- as.matrix(table(bias_man_north))
bias_man_north
                                 [,1]
ANTI-ARAB                           1
ANTI-ASIAN                         19
ANTI-BLACK                         14
ANTI-CATHOLIC                       3
ANTI-FEMALE HOMOSEXUAL (LESBIAN)    6
ANTI-GENDER NON-CONFORMING          3
ANTI-HISPANIC                       1
ANTI-JEWISH                        75
ANTI-LGBT (MIXED GROUP)             3
ANTI-MALE HOMOSEXUAL (GAY)         23
ANTI-MULTI-RACIAL GROUPS            1
ANTI-MUSLIM                         1
ANTI-OTHER ETHNICITY                5
ANTI-PHYSICAL DISABILITY            1
ANTI-TRANSGENDER                    3
ANTI-WHITE                          8
barchart(bias_man_north, main = "Bar Chart of Bias in Manhattan North" , col = mypalette)

Manhattan South

bias_man_south <- as.vector(man_south$`Bias Motive Description`) 

bias_man_south<- as.matrix(table(bias_man_south))
bias_man_south
                                 [,1]
ANTI-ARAB                           1
ANTI-ASIAN                         80
ANTI-BLACK                         17
ANTI-BUDDHIST                       1
ANTI-CATHOLIC                       6
ANTI-FEMALE HOMOSEXUAL (LESBIAN)    4
ANTI-HISPANIC                       3
ANTI-JEHOVAHS WITNESS               1
ANTI-JEWISH                       100
ANTI-LGBT (MIXED GROUP)             4
ANTI-MALE HOMOSEXUAL (GAY)         47
ANTI-MULTI-RACIAL GROUPS            2
ANTI-MUSLIM                         2
ANTI-OTHER ETHNICITY                6
ANTI-TRANSGENDER                    3
ANTI-WHITE                         18
barchart(bias_man_south, main = "Bar Chart of Bias in Manhattan South" , col = mypalette)

Queens North

bias_queens_north <- as.vector(queens_north$`Bias Motive Description`) 

bias_queens_north<- as.matrix(table(bias_queens_north))
bias_queens_north
                                  [,1]
60 YRS AND OLDER                     1
ANTI-ARAB                            1
ANTI-ASIAN                          25
ANTI-BLACK                          15
ANTI-BUDDHIST                        1
ANTI-CATHOLIC                        2
ANTI-GENDER NON-CONFORMING           2
ANTI-HINDU                           1
ANTI-HISPANIC                        3
ANTI-JEWISH                         60
ANTI-LGBT (MIXED GROUP)              1
ANTI-MALE HOMOSEXUAL (GAY)          16
ANTI-MUSLIM                          6
ANTI-OTHER ETHNICITY                 3
ANTI-OTHER RELIGION                  1
ANTI-RELIGIOUS PRACTICE GENERALLY    1
ANTI-TRANSGENDER                    12
ANTI-WHITE                           1
barchart(bias_queens_north, main = "Bar Chart of Bias in Queens North" , col = mypalette)

Queens South

bias_queens_south <- as.vector(queens_south$`Bias Motive Description`) 

bias_queens_south<- as.matrix(table(bias_queens_south))
bias_queens_south
                           [,1]
ANTI-ASIAN                    7
ANTI-BLACK                    9
ANTI-CATHOLIC                 3
ANTI-HINDU                    1
ANTI-HISPANIC                 2
ANTI-JEWISH                  30
ANTI-MALE HOMOSEXUAL (GAY)   12
ANTI-MUSLIM                   6
ANTI-OTHER ETHNICITY          3
ANTI-TRANSGENDER              3
ANTI-WHITE                    7
barchart(bias_queens_south, main = "Bar Chart of Bias in Queens South" , col = mypalette)

Staten Island

bias_staten_island <- as.vector(staten_island$`Bias Motive Description`) 

bias_staten_island<- as.matrix(table(bias_staten_island))
bias_staten_island
                           [,1]
ANTI-ASIAN                    3
ANTI-BLACK                   17
ANTI-HISPANIC                 1
ANTI-JEWISH                  18
ANTI-MALE HOMOSEXUAL (GAY)    3
ANTI-MUSLIM                   1
ANTI-OTHER ETHNICITY          2
ANTI-WHITE                    3
barchart(bias_staten_island, main = "Bar Chart of Bias in Staten Island" , col = mypalette)

LS0tCnRpdGxlOiAiTWF0aCA2NjQgUHJvamVjdCIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3IsIG1lc3NhZ2U9RkFMU0V9CmxpYnJhcnkocmVhZHIpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShtb3NhaWMpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkobW9zYWljQ29yZSkKbGlicmFyeShSQ29sb3JCcmV3ZXIpCkhhdGVDcmltZXMgPC0gcmVhZF9jc3YoIk5ZUERfSGF0ZV9DcmltZXMuY3N2IikKYGBgCgojIyBXaGF0IEFzc2F1bHRzIGFyZSBtb3N0IGNvbW1vbiBhbW9uZyBlYWNoIEJpYXMvQm9yb3VnaCBHcm91cD8KIyMjIEJpYXMKYGBge3J9CmJpYXMgPC0gYXMudmVjdG9yKEhhdGVDcmltZXMkYEJpYXMgTW90aXZlIERlc2NyaXB0aW9uYCkgCgpiaWFzIDwtIGFzLm1hdHJpeCh0YWJsZShiaWFzKSkKYmlhcwpgYGAKCmBgYHtyfQpteXBhbGV0dGU8LWJyZXdlci5wYWwoNywiQnVHbiIpIAoKYmFyY2hhcnQoYmlhcywgbWFpbiA9ICJCYXIgQ2hhcnQgb2YgQmlhcyIgLCBjb2wgPSBteXBhbGV0dGUpCmBgYAoKYGBge3J9CnNpeHR5eXJzIDwtIEhhdGVDcmltZXMgJT4lIGZpbHRlcihgQmlhcyBNb3RpdmUgRGVzY3JpcHRpb25gID09ICI2MCBZUlMgQU5EIE9MREVSIikKYW50aV9hcmFiIDwtIEhhdGVDcmltZXMgJT4lIGZpbHRlcihgQmlhcyBNb3RpdmUgRGVzY3JpcHRpb25gID09ICJBTlRJLUFSQUIiKQphbnRpX2FzYWluIDwtIEhhdGVDcmltZXMgJT4lIGZpbHRlcihgQmlhcyBNb3RpdmUgRGVzY3JpcHRpb25gID09ICJBTlRJLUFTSUFOIikKYW50aV9ibGFjayA8LSBIYXRlQ3JpbWVzICU+JSBmaWx0ZXIoYEJpYXMgTW90aXZlIERlc2NyaXB0aW9uYCA9PSAiQU5USS1CTEFDSyIpCmFudGlfYnVkZGhpc3QgPC0gSGF0ZUNyaW1lcyAlPiUgZmlsdGVyKGBCaWFzIE1vdGl2ZSBEZXNjcmlwdGlvbmAgPT0gIkFOVEktQlVEREhJU1QiKQphbnRpX2NhdGhvbGljIDwtIEhhdGVDcmltZXMgJT4lIGZpbHRlcihgQmlhcyBNb3RpdmUgRGVzY3JpcHRpb25gID09ICJBTlRJLUNBVEhPTElDIikKYW50aV9mZW1hbGUgPC0gSGF0ZUNyaW1lcyAlPiUgZmlsdGVyKGBCaWFzIE1vdGl2ZSBEZXNjcmlwdGlvbmAgPT0gIkFOVEktRkVNQUxFIikKYW50aV9sZXNiaWFuIDwtIEhhdGVDcmltZXMgJT4lIGZpbHRlcihgQmlhcyBNb3RpdmUgRGVzY3JpcHRpb25gID09ICJBTlRJLUZFTUFMRSBIT01PU0VYVUFMIChMRVNCSUFOKSIpCmFudGlfZ2VuZGVybm9uY29uZm9ybWluZyA8LSBIYXRlQ3JpbWVzICU+JSBmaWx0ZXIoYEJpYXMgTW90aXZlIERlc2NyaXB0aW9uYCA9PSAiQU5USS1HRU5ERVIgTk9OLUNPTkZPUk1JTkciKQphbnRpX2hpbmR1IDwtIEhhdGVDcmltZXMgJT4lIGZpbHRlcihgQmlhcyBNb3RpdmUgRGVzY3JpcHRpb25gID09ICJBTlRJLUhJTkRVIikKYW50aV9oaXNwYW5pYyA8LSBIYXRlQ3JpbWVzICU+JSBmaWx0ZXIoYEJpYXMgTW90aXZlIERlc2NyaXB0aW9uYCA9PSAiQU5USS1ISVNQQU5JQyIpCmFudGlfamVob3ZhczwtIEhhdGVDcmltZXMgJT4lIGZpbHRlcihgQmlhcyBNb3RpdmUgRGVzY3JpcHRpb25gID09ICJBTlRJLUpFSE9WQUhTIFdJVE5FU1MiKQphbnRpX2pld2lzaCA8LSBIYXRlQ3JpbWVzICU+JSBmaWx0ZXIoYEJpYXMgTW90aXZlIERlc2NyaXB0aW9uYCA9PSAiQU5USS1KRVdJU0giKQphbnRpX2xnYnQgPC0gSGF0ZUNyaW1lcyAlPiUgZmlsdGVyKGBCaWFzIE1vdGl2ZSBEZXNjcmlwdGlvbmAgPT0gIkFOVEktTEdCVCAoTUlYRUQgR1JPVVApIikKYW50aV9nYXkgPC0gSGF0ZUNyaW1lcyAlPiUgZmlsdGVyKGBCaWFzIE1vdGl2ZSBEZXNjcmlwdGlvbmAgPT0gIkFOVEktTUFMRSBIT01PU0VYVUFMIChHQVkpIikKYW50aV9tdWx0aXJhY2lhbCA8LSBIYXRlQ3JpbWVzICU+JSBmaWx0ZXIoYEJpYXMgTW90aXZlIERlc2NyaXB0aW9uYCA9PSAiQU5USS1NVUxUSS1SQUNJQUwgR1JPVVBTIikKYW50aV9tdXNsaW0gPC0gSGF0ZUNyaW1lcyAlPiUgZmlsdGVyKGBCaWFzIE1vdGl2ZSBEZXNjcmlwdGlvbmAgPT0gIkFOVEktTVVTTElNIikKYW50aV9vdGhlcmV0aG5pY2l0eSA8LSBIYXRlQ3JpbWVzICU+JSBmaWx0ZXIoYEJpYXMgTW90aXZlIERlc2NyaXB0aW9uYCA9PSAiQU5USS1PVEhFUiBFVEhOSUNJVFkiKQphbnRpX290aGVycmVsaWdpb24gPC0gSGF0ZUNyaW1lcyAlPiUgZmlsdGVyKGBCaWFzIE1vdGl2ZSBEZXNjcmlwdGlvbmAgPT0gIkFOVEktT1RIRVIgUkVMSUdJT04iKQphbnRpX3BoeXNpY2FsZGlzIDwtIEhhdGVDcmltZXMgJT4lIGZpbHRlcihgQmlhcyBNb3RpdmUgRGVzY3JpcHRpb25gID09ICJBTlRJLVBIWVNJQ0FMIERJU0FCSUxJVFkiKQphbnRpX3JlbGlnaW9uIDwtIEhhdGVDcmltZXMgJT4lIGZpbHRlcihgQmlhcyBNb3RpdmUgRGVzY3JpcHRpb25gID09ICJBTlRJLVJFTElHSU9VUyBQUkFDVElDRSBHRU5FUkFMTFkiKQphbnRpX3RyYW5zIDwtIEhhdGVDcmltZXMgJT4lIGZpbHRlcihgQmlhcyBNb3RpdmUgRGVzY3JpcHRpb25gID09ICJBTlRJLVRSQU5TR0VOREVSIikKYW50aV93aGl0ZSA8LSBIYXRlQ3JpbWVzICU+JSBmaWx0ZXIoYEJpYXMgTW90aXZlIERlc2NyaXB0aW9uYCA9PSAiQU5USS1XSElURSIpCmBgYAoKIyMjIyA2MCBZcnMKYGBge3J9CmFzc2F1bHRzXzYweXJzIDwtIGFzLnZlY3RvcihzaXh0eXlycyRgT2ZmZW5zZSBEZXNjcmlwdGlvbmApIAoKYXNzYXVsdHNfNjB5cnMgPC0gYXMubWF0cml4KHRhYmxlKGFzc2F1bHRzXzYweXJzKSkKYXNzYXVsdHNfNjB5cnMKYGBgCgojIyMjIEFudGktQXJhYgpgYGB7cn0KYXNzYXVsdHNfYW50aV9hcmFiIDwtIGFzLnZlY3RvcihhbnRpX2FyYWIkYE9mZmVuc2UgRGVzY3JpcHRpb25gKSAKCmFzc2F1bHRzX2FudGlfYXJhYiA8LSBhcy5tYXRyaXgodGFibGUoYXNzYXVsdHNfYW50aV9hcmFiKSkKYXNzYXVsdHNfYW50aV9hcmFiCgpiYXJjaGFydChhc3NhdWx0c19hbnRpX2FyYWIsIG1haW4gPSAiQmFyIENoYXJ0IG9mIEFzc2F1bHRzIHdpdGggQW50aS1BcmFiIEJpYXMiICwgY29sID0gbXlwYWxldHRlKQpgYGAKCiMjIyMgQW50aS1Bc2FpbgpgYGB7cn0KYXNzYXVsdHNfYW50aV9hc2FpbiA8LSBhcy52ZWN0b3IoYW50aV9hc2FpbiRgT2ZmZW5zZSBEZXNjcmlwdGlvbmApIAoKYXNzYXVsdHNfYW50aV9hc2FpbjwtIGFzLm1hdHJpeCh0YWJsZShhc3NhdWx0c19hbnRpX2FzYWluKSkKYXNzYXVsdHNfYW50aV9hc2FpbgoKYmFyY2hhcnQoYXNzYXVsdHNfYW50aV9hc2FpbiwgbWFpbiA9ICJCYXIgQ2hhcnQgb2YgQXNzYXVsdHMgd2l0aCBBbnRpLUFzYWluIEJpYXMiICwgY29sID0gbXlwYWxldHRlKQpgYGAKCiMjIyMgQW50aS1CbGFjawpgYGB7cn0KYXNzYXVsdHNfYW50aV9ibGFjayA8LSBhcy52ZWN0b3IoYW50aV9ibGFjayRgT2ZmZW5zZSBEZXNjcmlwdGlvbmApIAoKYXNzYXVsdHNfYW50aV9ibGFjazwtIGFzLm1hdHJpeCh0YWJsZShhc3NhdWx0c19hbnRpX2JsYWNrKSkKYXNzYXVsdHNfYW50aV9ibGFjawoKYmFyY2hhcnQoYXNzYXVsdHNfYW50aV9ibGFjaywgbWFpbiA9ICJCYXIgQ2hhcnQgb2YgQXNzYXVsdHMgd2l0aCBBbnRpLUJsYWNrIEJpYXMiICwgY29sID0gbXlwYWxldHRlKQpgYGAKCiMjIyMgQW50aS1CdWRkaGlzdApgYGB7cn0KYXNzYXVsdHNfYW50aV9idWRkaGlzdCA8LSBhcy52ZWN0b3IoYW50aV9idWRkaGlzdCRgT2ZmZW5zZSBEZXNjcmlwdGlvbmApIAoKYXNzYXVsdHNfYW50aV9idWRkaGlzdDwtIGFzLm1hdHJpeCh0YWJsZShhc3NhdWx0c19hbnRpX2J1ZGRoaXN0KSkKYXNzYXVsdHNfYW50aV9idWRkaGlzdAoKYmFyY2hhcnQoYXNzYXVsdHNfYW50aV9idWRkaGlzdCwgbWFpbiA9ICJCYXIgQ2hhcnQgb2YgQXNzYXVsdHMgd2l0aCBBbnRpX0J1ZGRoaXN0IEJpYXMiICwgY29sID0gbXlwYWxldHRlKQpgYGAKCiMjIyMgQW50aS1DYXRob2xpYwpgYGB7cn0KYXNzYXVsdHNfYW50aV9jYXRob2xpYyA8LSBhcy52ZWN0b3IoYW50aV9jYXRob2xpYyRgT2ZmZW5zZSBEZXNjcmlwdGlvbmApIAoKYXNzYXVsdHNfYW50aV9jYXRob2xpYzwtIGFzLm1hdHJpeCh0YWJsZShhc3NhdWx0c19hbnRpX2NhdGhvbGljKSkKYXNzYXVsdHNfYW50aV9jYXRob2xpYwoKYmFyY2hhcnQoYXNzYXVsdHNfYW50aV9jYXRob2xpYywgbWFpbiA9ICJCYXIgQ2hhcnQgb2YgQXNzYXVsdHMgd2l0aCBBbnRpLUNhdGhvbGljIEJpYXMiICwgY29sID0gbXlwYWxldHRlKQpgYGAKCiMjIyMgQW50aS1GZW1hbGUKYGBge3J9CmFzc2F1bHRzX2FudGlfZmVtYWxlIDwtIGFzLnZlY3RvcihhbnRpX2ZlbWFsZSRgT2ZmZW5zZSBEZXNjcmlwdGlvbmApIAoKYXNzYXVsdHNfYW50aV9mZW1hbGU8LSBhcy5tYXRyaXgodGFibGUoYXNzYXVsdHNfYW50aV9mZW1hbGUpKQphc3NhdWx0c19hbnRpX2ZlbWFsZQoKYmFyY2hhcnQoYXNzYXVsdHNfYW50aV9mZW1hbGUsIG1haW4gPSAiQmFyIENoYXJ0IG9mIEFzc2F1bHRzIHdpdGggQW50aS1GZW1hbGUgQmlhcyIgLCBjb2wgPSBteXBhbGV0dGUpCmBgYAoKIyMjIyBBbnRpLUxlc2JpYW4KYGBge3J9CmFzc2F1bHRzX2FudGlfbGVzYmlhbiA8LSBhcy52ZWN0b3IoYW50aV9sZXNiaWFuJGBPZmZlbnNlIERlc2NyaXB0aW9uYCkgCgphc3NhdWx0c19hbnRpX2xlc2JpYW48LSBhcy5tYXRyaXgodGFibGUoYXNzYXVsdHNfYW50aV9sZXNiaWFuKSkKYXNzYXVsdHNfYW50aV9sZXNiaWFuCgpiYXJjaGFydChhc3NhdWx0c19hbnRpX2xlc2JpYW4sIG1haW4gPSAiQmFyIENoYXJ0IG9mIEFzc2F1bHRzIHdpdGggQW50aS1MZXNiaWFuIEJpYXMiICwgY29sID0gbXlwYWxldHRlKQpgYGAKCiMjIyMgQW50aS1HZW5kZXIgTm9uLUNvbmZvcm1pbmcKYGBge3J9CmFzc2F1bHRzX2FudGlfZ2VuZGVybm9uY29uZm9ybWluZyA8LSBhcy52ZWN0b3IoYW50aV9nZW5kZXJub25jb25mb3JtaW5nJGBPZmZlbnNlIERlc2NyaXB0aW9uYCkgCgphc3NhdWx0c19hbnRpX2dlbmRlcm5vbmNvbmZvcm1pbmc8LSBhcy5tYXRyaXgodGFibGUoYXNzYXVsdHNfYW50aV9nZW5kZXJub25jb25mb3JtaW5nKSkKYXNzYXVsdHNfYW50aV9nZW5kZXJub25jb25mb3JtaW5nCgpiYXJjaGFydChhc3NhdWx0c19hbnRpX2dlbmRlcm5vbmNvbmZvcm1pbmcsIG1haW4gPSAiQmFyIENoYXJ0IG9mIEFzc2F1bHRzIHdpdGggQW50aS1HZW5kZXIgTm9uLUNvbmZvcm1pbmcgQmlhcyIgLCBjb2wgPSBteXBhbGV0dGUpCmBgYAoKIyMjIyBBbnRpLUhpbmR1CmBgYHtyfQphc3NhdWx0c19hbnRpX2hpbmR1IDwtIGFzLnZlY3RvcihhbnRpX2hpbmR1JGBPZmZlbnNlIERlc2NyaXB0aW9uYCkgCgphc3NhdWx0c19hbnRpX2hpbmR1PC0gYXMubWF0cml4KHRhYmxlKGFzc2F1bHRzX2FudGlfaGluZHUpKQphc3NhdWx0c19hbnRpX2hpbmR1CgpiYXJjaGFydChhc3NhdWx0c19hbnRpX2hpbmR1LCBtYWluID0gIkJhciBDaGFydCBvZiBBc3NhdWx0cyB3aXRoIEFudGktSGluZHUgQmlhcyIgLCBjb2wgPSBteXBhbGV0dGUpCmBgYAoKIyMjIyBBbnRpLUhpc3BhbmljCmBgYHtyfQphc3NhdWx0c19hbnRpX2hpc3BhbmljIDwtIGFzLnZlY3RvcihhbnRpX2hpc3BhbmljJGBPZmZlbnNlIERlc2NyaXB0aW9uYCkgCgphc3NhdWx0c19hbnRpX2hpc3BhbmljPC0gYXMubWF0cml4KHRhYmxlKGFzc2F1bHRzX2FudGlfaGlzcGFuaWMpKQphc3NhdWx0c19hbnRpX2hpc3BhbmljCgpiYXJjaGFydChhc3NhdWx0c19hbnRpX2hpc3BhbmljLCBtYWluID0gIkJhciBDaGFydCBvZiBBc3NhdWx0cyB3aXRoIEFudGktSGlzcGFuaWMgQmlhcyIgLCBjb2wgPSBteXBhbGV0dGUpCmBgYAoKIyMjIyBBbnRpLUplaG92YXMgV2l0bmVzc2VzCmBgYHtyfQphc3NhdWx0c19hbnRpX2plaG92YXMgPC0gYXMudmVjdG9yKGFudGlfamVob3ZhcyRgT2ZmZW5zZSBEZXNjcmlwdGlvbmApIAoKYXNzYXVsdHNfYW50aV9qZWhvdmFzPC0gYXMubWF0cml4KHRhYmxlKGFzc2F1bHRzX2FudGlfamVob3ZhcykpCmFzc2F1bHRzX2FudGlfamVob3ZhcwoKYmFyY2hhcnQoYXNzYXVsdHNfYW50aV9qZWhvdmFzLCBtYWluID0gIkJhciBDaGFydCBvZiBBc3NhdWx0cyB3aXRoIEFudGktSmVob3ZhcyBXaXRuZXNzZXMgQmlhcyIgLCBjb2wgPSBteXBhbGV0dGUpCmBgYAoKIyMjIyBBbnRpLUpld2lzaApgYGB7cn0KYXNzYXVsdHNfYW50aV9qZXdpc2ggPC0gYXMudmVjdG9yKGFudGlfamV3aXNoJGBPZmZlbnNlIERlc2NyaXB0aW9uYCkgCgphc3NhdWx0c19hbnRpX2pld2lzaDwtIGFzLm1hdHJpeCh0YWJsZShhc3NhdWx0c19hbnRpX2pld2lzaCkpCmFzc2F1bHRzX2FudGlfamV3aXNoCgpiYXJjaGFydChhc3NhdWx0c19hbnRpX2pld2lzaCwgbWFpbiA9ICJCYXIgQ2hhcnQgb2YgQXNzYXVsdHMgd2l0aCBBbnRpLUpld2lzaCBCaWFzIiAsIGNvbCA9IG15cGFsZXR0ZSkKYGBgCgojIyMjIEFudGktTEdCVApgYGB7cn0KYXNzYXVsdHNfYW50aV9sZ2J0IDwtIGFzLnZlY3RvcihhbnRpX2xnYnQkYE9mZmVuc2UgRGVzY3JpcHRpb25gKSAKCmFzc2F1bHRzX2FudGlfbGdidDwtIGFzLm1hdHJpeCh0YWJsZShhc3NhdWx0c19hbnRpX2xnYnQpKQphc3NhdWx0c19hbnRpX2xnYnQKCmJhcmNoYXJ0KGFzc2F1bHRzX2FudGlfbGdidCwgbWFpbiA9ICJCYXIgQ2hhcnQgb2YgQXNzYXVsdHMgd2l0aCBBbnRpLUxHQlQgQmlhcyIgLCBjb2wgPSBteXBhbGV0dGUpCmBgYAoKIyMjIyBBbnRpLUdheQpgYGB7cn0KYXNzYXVsdHNfYW50aV9nYXkgPC0gYXMudmVjdG9yKGFudGlfZ2F5JGBPZmZlbnNlIERlc2NyaXB0aW9uYCkgCgphc3NhdWx0c19hbnRpX2dheTwtIGFzLm1hdHJpeCh0YWJsZShhc3NhdWx0c19hbnRpX2dheSkpCmFzc2F1bHRzX2FudGlfZ2F5CgpiYXJjaGFydChhc3NhdWx0c19hbnRpX2dheSwgbWFpbiA9ICJCYXIgQ2hhcnQgb2YgQXNzYXVsdHMgd2l0aCBBbnRpLUdheSBCaWFzIiAsIGNvbCA9IG15cGFsZXR0ZSkKYGBgCgojIyMjIEFudGktTXVsdGlyYWNpYWwgR3JvdXBzCmBgYHtyfQphc3NhdWx0c19hbnRpX211bHRpcmFjaWFsIDwtIGFzLnZlY3RvcihhbnRpX211bHRpcmFjaWFsJGBPZmZlbnNlIERlc2NyaXB0aW9uYCkgCgphc3NhdWx0c19hbnRpX211bHRpcmFjaWFsPC0gYXMubWF0cml4KHRhYmxlKGFzc2F1bHRzX2FudGlfbXVsdGlyYWNpYWwpKQphc3NhdWx0c19hbnRpX211bHRpcmFjaWFsCgpiYXJjaGFydChhc3NhdWx0c19hbnRpX211bHRpcmFjaWFsLCBtYWluID0gIkJhciBDaGFydCBvZiBBc3NhdWx0cyB3aXRoIEFudGktTXVsdGlyYWNpYWwgR3JvdXBzIEJpYXMiICwgY29sID0gbXlwYWxldHRlKQpgYGAKCiMjIyMgQW50aS1NdXNsaW0KYGBge3J9CmFzc2F1bHRzX2FudGlfbXVzbGltIDwtIGFzLnZlY3RvcihhbnRpX211c2xpbSRgT2ZmZW5zZSBEZXNjcmlwdGlvbmApIAoKYXNzYXVsdHNfYW50aV9tdXNsaW08LSBhcy5tYXRyaXgodGFibGUoYXNzYXVsdHNfYW50aV9tdXNsaW0pKQphc3NhdWx0c19hbnRpX211c2xpbQoKYmFyY2hhcnQoYXNzYXVsdHNfYW50aV9tdXNsaW0sIG1haW4gPSAiQmFyIENoYXJ0IG9mIEFzc2F1bHRzIHdpdGggQW50aS1NdXNsaW0gQmlhcyIgLCBjb2wgPSBteXBhbGV0dGUpCmBgYAoKIyMjIyBBbnRpLU90aGVyIEV0aG5pY2l0eQpgYGB7cn0KYXNzYXVsdHNfYW50aV9vdGhlcmV0aG5pY2l0eSA8LSBhcy52ZWN0b3IoYW50aV9vdGhlcmV0aG5pY2l0eSRgT2ZmZW5zZSBEZXNjcmlwdGlvbmApIAoKYXNzYXVsdHNfYW50aV9vdGhlcmV0aG5pY2l0eTwtIGFzLm1hdHJpeCh0YWJsZShhc3NhdWx0c19hbnRpX290aGVyZXRobmljaXR5KSkKYXNzYXVsdHNfYW50aV9vdGhlcmV0aG5pY2l0eQoKYmFyY2hhcnQoYXNzYXVsdHNfYW50aV9vdGhlcmV0aG5pY2l0eSwgbWFpbiA9ICJCYXIgQ2hhcnQgb2YgQXNzYXVsdHMgd2l0aCBBbnRpLU90aGVyIEV0aG5pY2l0eSBCaWFzIiAsIGNvbCA9IG15cGFsZXR0ZSkKYGBgCgojIyMjIEFudGktT3RoZXIgUmVsaWdpb24KYGBge3J9CmFzc2F1bHRzX2FudGlfb3RoZXJyZWxpZ2lvbiA8LSBhcy52ZWN0b3IoYW50aV9vdGhlcnJlbGlnaW9uJGBPZmZlbnNlIERlc2NyaXB0aW9uYCkgCgphc3NhdWx0c19hbnRpX290aGVycmVsaWdpb248LSBhcy5tYXRyaXgodGFibGUoYXNzYXVsdHNfYW50aV9vdGhlcnJlbGlnaW9uKSkKYXNzYXVsdHNfYW50aV9vdGhlcnJlbGlnaW9uCgpiYXJjaGFydChhc3NhdWx0c19hbnRpX290aGVycmVsaWdpb24sIG1haW4gPSAiQmFyIENoYXJ0IG9mIEFzc2F1bHRzIHdpdGggQW50aS1PdGhlciBSZWxpZ2lvbiBCaWFzIiAsIGNvbCA9IG15cGFsZXR0ZSkKYGBgCgojIyMjIEFudGktUGh5c2ljYWwgRGlzYWJpbGl0eQpgYGB7cn0KYXNzYXVsdHNfYW50aV9waHlzaWNhbGRpcyA8LSBhcy52ZWN0b3IoYW50aV9waHlzaWNhbGRpcyRgT2ZmZW5zZSBEZXNjcmlwdGlvbmApIAoKYXNzYXVsdHNfYW50aV9waHlzaWNhbGRpczwtIGFzLm1hdHJpeCh0YWJsZShhc3NhdWx0c19hbnRpX3BoeXNpY2FsZGlzKSkKYXNzYXVsdHNfYW50aV9waHlzaWNhbGRpcwoKYmFyY2hhcnQoYXNzYXVsdHNfYW50aV9waHlzaWNhbGRpcywgbWFpbiA9ICJCYXIgQ2hhcnQgb2YgQXNzYXVsdHMgd2l0aCBBbnRpLVBoeXNpY2FsIERpc2FiaWxpdHkgQmlhcyIgLCBjb2wgPSBteXBhbGV0dGUpCmBgYAoKIyMjIyBBbnRpLVJlbGlnaW9uIFByYWN0aWNlcyBHZW5lcmFsbHkKYGBge3J9CmFzc2F1bHRzX2FudGlfcmVsaWdpb24gPC0gYXMudmVjdG9yKGFudGlfcmVsaWdpb24kYE9mZmVuc2UgRGVzY3JpcHRpb25gKSAKCmFzc2F1bHRzX2FudGlfcmVsaWdpb248LSBhcy5tYXRyaXgodGFibGUoYXNzYXVsdHNfYW50aV9yZWxpZ2lvbikpCmFzc2F1bHRzX2FudGlfcmVsaWdpb24KCmJhcmNoYXJ0KGFzc2F1bHRzX2FudGlfcmVsaWdpb24sIG1haW4gPSAiQmFyIENoYXJ0IG9mIEFzc2F1bHRzIHdpdGggQW50aS1SZWxpZ2lvbiBQcmFjdGljZXMgR2VuZXJhbGx5IEJpYXMiICwgY29sID0gbXlwYWxldHRlKQpgYGAKCiMjIyMgQW50aS1UcmFuc2dlbmRlcgpgYGB7cn0KYXNzYXVsdHNfYW50aV90cmFucyA8LSBhcy52ZWN0b3IoYW50aV90cmFucyRgT2ZmZW5zZSBEZXNjcmlwdGlvbmApIAoKYXNzYXVsdHNfYW50aV90cmFuczwtIGFzLm1hdHJpeCh0YWJsZShhc3NhdWx0c19hbnRpX3RyYW5zKSkKYXNzYXVsdHNfYW50aV90cmFucwoKYmFyY2hhcnQoYXNzYXVsdHNfYW50aV90cmFucywgbWFpbiA9ICJCYXIgQ2hhcnQgb2YgQXNzYXVsdHMgd2l0aCBBbnRpLVRyYW5zZ2VuZGVyIEJpYXMiICwgY29sID0gbXlwYWxldHRlKQpgYGAKCiMjIyMgQW50aS1XaGl0ZQpgYGB7cn0KYXNzYXVsdHNfYW50aV93aGl0ZSA8LSBhcy52ZWN0b3IoYW50aV93aGl0ZSRgT2ZmZW5zZSBEZXNjcmlwdGlvbmApIAoKYXNzYXVsdHNfYW50aV93aGl0ZTwtIGFzLm1hdHJpeCh0YWJsZShhc3NhdWx0c19hbnRpX3doaXRlKSkKYXNzYXVsdHNfYW50aV93aGl0ZQoKYmFyY2hhcnQoYXNzYXVsdHNfYW50aV93aGl0ZSwgbWFpbiA9ICJCYXIgQ2hhcnQgb2YgQXNzYXVsdHMgd2l0aCBBbnRpLVdoaXRlIEJpYXMiICwgY29sID0gbXlwYWxldHRlKQpgYGAKCiMjIyBCb3JvdWdoCmBgYHtyfQpib3JvdWdoIDwtIGFzLnZlY3RvcihIYXRlQ3JpbWVzJGBQYXRyb2wgQm9yb3VnaCBOYW1lYCkgCgpib3JvdWdoIDwtIGFzLm1hdHJpeCh0YWJsZShib3JvdWdoKSkKYm9yb3VnaApgYGAKCmBgYHtyfQpteXBhbGV0dGU8LWJyZXdlci5wYWwoNywiQnVHbiIpIAoKYmFyY2hhcnQoYm9yb3VnaCwgbWFpbiA9ICJCYXIgQ2hhcnQgb2YgQm9yb3VnaCIgLCBjb2wgPSBteXBhbGV0dGUpCmBgYAoKYGBge3J9CmJrbHluX25vcnRoIDwtIEhhdGVDcmltZXMgJT4lIGZpbHRlcihgUGF0cm9sIEJvcm91Z2ggTmFtZWAgPT0gIlBBVFJPTCBCT1JPIEJLTFlOIE5PUlRIIikKYmtseW5fc291dGggPC0gSGF0ZUNyaW1lcyAlPiUgZmlsdGVyKGBQYXRyb2wgQm9yb3VnaCBOYW1lYCA9PSAiUEFUUk9MIEJPUk8gQktMWU4gU09VVEgiKQpicm9ueCA8LSBIYXRlQ3JpbWVzICU+JSBmaWx0ZXIoYFBhdHJvbCBCb3JvdWdoIE5hbWVgID09ICJQQVRST0wgQk9STyBCUk9OWCIpCm1hbl9ub3J0aCA8LSBIYXRlQ3JpbWVzICU+JSBmaWx0ZXIoYFBhdHJvbCBCb3JvdWdoIE5hbWVgID09ICJQQVRST0wgQk9STyBNQU4gTk9SVEgiKQptYW5fc291dGggPC0gSGF0ZUNyaW1lcyAlPiUgZmlsdGVyKGBQYXRyb2wgQm9yb3VnaCBOYW1lYCA9PSAiUEFUUk9MIEJPUk8gTUFOIFNPVVRIIikKcXVlZW5zX25vcnRoIDwtIEhhdGVDcmltZXMgJT4lIGZpbHRlcihgUGF0cm9sIEJvcm91Z2ggTmFtZWAgPT0gIlBBVFJPTCBCT1JPIFFVRUVOUyBOT1JUSCIpCnF1ZWVuc19zb3V0aCA8LSBIYXRlQ3JpbWVzICU+JSBmaWx0ZXIoYFBhdHJvbCBCb3JvdWdoIE5hbWVgID09ICJQQVRST0wgQk9STyBRVUVFTlMgU09VVEgiKQpzdGF0ZW5faXNsYW5kIDwtIEhhdGVDcmltZXMgJT4lIGZpbHRlcihgUGF0cm9sIEJvcm91Z2ggTmFtZWAgPT0gIlBBVFJPTCBCT1JPIFNUQVRFTiBJU0xBTkQiKQpgYGAKCiMjIyMgQnJvb2tseW4gTm9ydGgKYGBge3J9CmFzc2F1bHRzX2JrbHluX25vcnRoIDwtIGFzLnZlY3Rvcihia2x5bl9ub3J0aCRgT2ZmZW5zZSBEZXNjcmlwdGlvbmApIAoKYXNzYXVsdHNfYmtseW5fbm9ydGg8LSBhcy5tYXRyaXgodGFibGUoYXNzYXVsdHNfYmtseW5fbm9ydGgpKQphc3NhdWx0c19ia2x5bl9ub3J0aAoKYmFyY2hhcnQoYXNzYXVsdHNfYmtseW5fbm9ydGgsIG1haW4gPSAiQmFyIENoYXJ0IG9mIEFzc2F1bHRzIGluIEJyb29rbHluIE5vcnRoIiAsIGNvbCA9IG15cGFsZXR0ZSkKYGBgCgojIyMjIEJyb29rbHluIFNvdXRoCmBgYHtyfQphc3NhdWx0c19ia2x5bl9zb3V0aCA8LSBhcy52ZWN0b3IoYmtseW5fc291dGgkYE9mZmVuc2UgRGVzY3JpcHRpb25gKSAKCmFzc2F1bHRzX2JrbHluX3NvdXRoPC0gYXMubWF0cml4KHRhYmxlKGFzc2F1bHRzX2JrbHluX3NvdXRoKSkKYXNzYXVsdHNfYmtseW5fc291dGgKCmJhcmNoYXJ0KGFzc2F1bHRzX2JrbHluX3NvdXRoLCBtYWluID0gIkJhciBDaGFydCBvZiBBc3NhdWx0cyBpbiBCcm9va2x5biBTb3V0aCIgLCBjb2wgPSBteXBhbGV0dGUpCmBgYAoKIyMjIyBCcm9ueApgYGB7cn0KYXNzYXVsdHNfYnJvbnggPC0gYXMudmVjdG9yKGJyb254JGBPZmZlbnNlIERlc2NyaXB0aW9uYCkgCgphc3NhdWx0c19icm9ueDwtIGFzLm1hdHJpeCh0YWJsZShhc3NhdWx0c19icm9ueCkpCmFzc2F1bHRzX2Jyb254CgpiYXJjaGFydChhc3NhdWx0c19icm9ueCwgbWFpbiA9ICJCYXIgQ2hhcnQgb2YgQXNzYXVsdHMgaW4gQnJvbngiICwgY29sID0gbXlwYWxldHRlKQpgYGAKCiMjIyMgTWFuaGF0dGFuIE5vcnRoCmBgYHtyfQphc3NhdWx0c19tYW5fbm9ydGggPC0gYXMudmVjdG9yKG1hbl9ub3J0aCRgT2ZmZW5zZSBEZXNjcmlwdGlvbmApIAoKYXNzYXVsdHNfbWFuX25vcnRoPC0gYXMubWF0cml4KHRhYmxlKGFzc2F1bHRzX21hbl9ub3J0aCkpCmFzc2F1bHRzX21hbl9ub3J0aAoKYmFyY2hhcnQoYXNzYXVsdHNfbWFuX25vcnRoLCBtYWluID0gIkJhciBDaGFydCBvZiBBc3NhdWx0cyBpbiBNYW5oYXR0YW4gTm9ydGgiICwgY29sID0gbXlwYWxldHRlKQpgYGAKCiMjIyMgTWFuaGF0dGFuIFNvdXRoCmBgYHtyfQphc3NhdWx0c19tYW5fc291dGggPC0gYXMudmVjdG9yKG1hbl9zb3V0aCRgT2ZmZW5zZSBEZXNjcmlwdGlvbmApIAoKYXNzYXVsdHNfbWFuX3NvdXRoPC0gYXMubWF0cml4KHRhYmxlKGFzc2F1bHRzX21hbl9zb3V0aCkpCmFzc2F1bHRzX21hbl9zb3V0aAoKYmFyY2hhcnQoYXNzYXVsdHNfbWFuX3NvdXRoLCBtYWluID0gIkJhciBDaGFydCBvZiBBc3NhdWx0cyBpbiBNYW5oYXR0YW4gU291dGgiICwgY29sID0gbXlwYWxldHRlKQpgYGAKCiMjIyMgUXVlZW5zIE5vcnRoCmBgYHtyfQphc3NhdWx0c19xdWVlbnNfbm9ydGggPC0gYXMudmVjdG9yKHF1ZWVuc19ub3J0aCRgT2ZmZW5zZSBEZXNjcmlwdGlvbmApIAoKYXNzYXVsdHNfcXVlZW5zX25vcnRoPC0gYXMubWF0cml4KHRhYmxlKGFzc2F1bHRzX3F1ZWVuc19ub3J0aCkpCmFzc2F1bHRzX3F1ZWVuc19ub3J0aAoKYmFyY2hhcnQoYXNzYXVsdHNfcXVlZW5zX25vcnRoLCBtYWluID0gIkJhciBDaGFydCBvZiBBc3NhdWx0cyBpbiBRdWVlbnMgTm9ydGgiICwgY29sID0gbXlwYWxldHRlKQpgYGAKCiMjIyMgUXVlZW5zIFNvdXRoCmBgYHtyfQphc3NhdWx0c19xdWVlbnNfc291dGggPC0gYXMudmVjdG9yKHF1ZWVuc19zb3V0aCRgT2ZmZW5zZSBEZXNjcmlwdGlvbmApIAoKYXNzYXVsdHNfcXVlZW5zX3NvdXRoPC0gYXMubWF0cml4KHRhYmxlKGFzc2F1bHRzX3F1ZWVuc19zb3V0aCkpCmFzc2F1bHRzX3F1ZWVuc19zb3V0aAoKYmFyY2hhcnQoYXNzYXVsdHNfcXVlZW5zX3NvdXRoLCBtYWluID0gIkJhciBDaGFydCBvZiBBc3NhdWx0cyBpbiBRdWVlbnMgU291dGgiICwgY29sID0gbXlwYWxldHRlKQpgYGAKCiMjIyMgU3RhdGVuIElzbGFuZApgYGB7cn0KYXNzYXVsdHNfc3RhdGVuX2lzbGFuZCA8LSBhcy52ZWN0b3Ioc3RhdGVuX2lzbGFuZCRgT2ZmZW5zZSBEZXNjcmlwdGlvbmApIAoKYXNzYXVsdHNfc3RhdGVuX2lzbGFuZDwtIGFzLm1hdHJpeCh0YWJsZShhc3NhdWx0c19zdGF0ZW5faXNsYW5kKSkKYXNzYXVsdHNfc3RhdGVuX2lzbGFuZAoKYmFyY2hhcnQoYXNzYXVsdHNfc3RhdGVuX2lzbGFuZCwgbWFpbiA9ICJCYXIgQ2hhcnQgb2YgQXNzYXVsdHMgaW4gU3RhdGVuIElzbGFuZCIgLCBjb2wgPSBteXBhbGV0dGUpCmBgYAoKIyMjIEJpYXMgZ3JvdXAgYXNzYXVsdGVkIHRoZSBtb3N0IGluIGVhY2ggYm9yb3VnaAojIyMjIEJyb29rbHluIE5vcnRoCmBgYHtyfQpiaWFzX2JrbHluX25vcnRoIDwtIGFzLnZlY3Rvcihia2x5bl9ub3J0aCRgQmlhcyBNb3RpdmUgRGVzY3JpcHRpb25gKSAKCmJpYXNfYmtseW5fbm9ydGg8LSBhcy5tYXRyaXgodGFibGUoYmlhc19ia2x5bl9ub3J0aCkpCmJpYXNfYmtseW5fbm9ydGgKCmJhcmNoYXJ0KGJpYXNfYmtseW5fbm9ydGgsIG1haW4gPSAiQmFyIENoYXJ0IG9mIEJpYXMgaW4gQnJvb2tseW4gTm9ydGgiICwgY29sID0gbXlwYWxldHRlKQpgYGAKCiMjIyMgQnJvb2tseW4gU291dGgKYGBge3J9CmJpYXNfYmtseW5fc291dGggPC0gYXMudmVjdG9yKGJrbHluX3NvdXRoJGBCaWFzIE1vdGl2ZSBEZXNjcmlwdGlvbmApIAoKYmlhc19ia2x5bl9zb3V0aDwtIGFzLm1hdHJpeCh0YWJsZShiaWFzX2JrbHluX3NvdXRoKSkKYmlhc19ia2x5bl9zb3V0aAoKYmFyY2hhcnQoYmlhc19ia2x5bl9zb3V0aCwgbWFpbiA9ICJCYXIgQ2hhcnQgb2YgQmlhcyBpbiBCcm9va2x5biBTb3V0aCIgLCBjb2wgPSBteXBhbGV0dGUpCmBgYAoKIyMjIyBCcm9ueApgYGB7cn0KYmlhc19icm9ueCA8LSBhcy52ZWN0b3IoYnJvbngkYEJpYXMgTW90aXZlIERlc2NyaXB0aW9uYCkgCgpiaWFzX2Jyb254PC0gYXMubWF0cml4KHRhYmxlKGJpYXNfYnJvbngpKQpiaWFzX2Jyb254CgpiYXJjaGFydChiaWFzX2Jyb254LCBtYWluID0gIkJhciBDaGFydCBvZiBCaWFzIGluIEJyb254IiAsIGNvbCA9IG15cGFsZXR0ZSkKYGBgCgojIyMjIE1hbmhhdHRhbiBOb3J0aApgYGB7cn0KYmlhc19tYW5fbm9ydGggPC0gYXMudmVjdG9yKG1hbl9ub3J0aCRgQmlhcyBNb3RpdmUgRGVzY3JpcHRpb25gKSAKCmJpYXNfbWFuX25vcnRoPC0gYXMubWF0cml4KHRhYmxlKGJpYXNfbWFuX25vcnRoKSkKYmlhc19tYW5fbm9ydGgKCmJhcmNoYXJ0KGJpYXNfbWFuX25vcnRoLCBtYWluID0gIkJhciBDaGFydCBvZiBCaWFzIGluIE1hbmhhdHRhbiBOb3J0aCIgLCBjb2wgPSBteXBhbGV0dGUpCmBgYAoKIyMjIyBNYW5oYXR0YW4gU291dGgKYGBge3J9CmJpYXNfbWFuX3NvdXRoIDwtIGFzLnZlY3RvcihtYW5fc291dGgkYEJpYXMgTW90aXZlIERlc2NyaXB0aW9uYCkgCgpiaWFzX21hbl9zb3V0aDwtIGFzLm1hdHJpeCh0YWJsZShiaWFzX21hbl9zb3V0aCkpCmJpYXNfbWFuX3NvdXRoCgpiYXJjaGFydChiaWFzX21hbl9zb3V0aCwgbWFpbiA9ICJCYXIgQ2hhcnQgb2YgQmlhcyBpbiBNYW5oYXR0YW4gU291dGgiICwgY29sID0gbXlwYWxldHRlKQpgYGAKCiMjIyMgUXVlZW5zIE5vcnRoCmBgYHtyfQpiaWFzX3F1ZWVuc19ub3J0aCA8LSBhcy52ZWN0b3IocXVlZW5zX25vcnRoJGBCaWFzIE1vdGl2ZSBEZXNjcmlwdGlvbmApIAoKYmlhc19xdWVlbnNfbm9ydGg8LSBhcy5tYXRyaXgodGFibGUoYmlhc19xdWVlbnNfbm9ydGgpKQpiaWFzX3F1ZWVuc19ub3J0aAoKYmFyY2hhcnQoYmlhc19xdWVlbnNfbm9ydGgsIG1haW4gPSAiQmFyIENoYXJ0IG9mIEJpYXMgaW4gUXVlZW5zIE5vcnRoIiAsIGNvbCA9IG15cGFsZXR0ZSkKYGBgCgojIyMjIFF1ZWVucyBTb3V0aApgYGB7cn0KYmlhc19xdWVlbnNfc291dGggPC0gYXMudmVjdG9yKHF1ZWVuc19zb3V0aCRgQmlhcyBNb3RpdmUgRGVzY3JpcHRpb25gKSAKCmJpYXNfcXVlZW5zX3NvdXRoPC0gYXMubWF0cml4KHRhYmxlKGJpYXNfcXVlZW5zX3NvdXRoKSkKYmlhc19xdWVlbnNfc291dGgKCmJhcmNoYXJ0KGJpYXNfcXVlZW5zX3NvdXRoLCBtYWluID0gIkJhciBDaGFydCBvZiBCaWFzIGluIFF1ZWVucyBTb3V0aCIgLCBjb2wgPSBteXBhbGV0dGUpCmBgYAoKIyMjIyBTdGF0ZW4gSXNsYW5kCmBgYHtyfQpiaWFzX3N0YXRlbl9pc2xhbmQgPC0gYXMudmVjdG9yKHN0YXRlbl9pc2xhbmQkYEJpYXMgTW90aXZlIERlc2NyaXB0aW9uYCkgCgpiaWFzX3N0YXRlbl9pc2xhbmQ8LSBhcy5tYXRyaXgodGFibGUoYmlhc19zdGF0ZW5faXNsYW5kKSkKYmlhc19zdGF0ZW5faXNsYW5kCgpiYXJjaGFydChiaWFzX3N0YXRlbl9pc2xhbmQsIG1haW4gPSAiQmFyIENoYXJ0IG9mIEJpYXMgaW4gU3RhdGVuIElzbGFuZCIgLCBjb2wgPSBteXBhbGV0dGUpCmBgYAoKCiAKCgoKCgoKCgoKCgoKCg==